Multi-threading এবং Forking দুটি প্রধান কৌশল, যা Concurrency অর্জনের জন্য ব্যবহৃত হয়। এদের মাধ্যমে নেটওয়ার্ক প্রোগ্রামিং, সার্ভার ডিজাইন, এবং অন্যান্য অ্যাপ্লিকেশনগুলোর ক্ষেত্রে একাধিক কাজ একই সময়ে চালানো যায়। তবে এদের ব্যবহারের পদ্ধতি, কার্যকারিতা, এবং রিসোর্স ব্যবহারের দিক থেকে কিছু পার্থক্য রয়েছে। নিচে Multi-threading এবং Forking এর বিস্তারিত ব্যাখ্যা এবং উদাহরণ দেওয়া হলো।
Multi-threading হলো একটি প্রক্রিয়ার মধ্যে একাধিক থ্রেড তৈরি করা, যেখানে প্রতিটি থ্রেড একটি নির্দিষ্ট কাজ সম্পন্ন করে। এটি Concurrency অর্জনের একটি পদ্ধতি, যেখানে একটি প্রক্রিয়া একাধিক কাজ একসাথে সম্পন্ন করে।
Shared Memory:
কম রিসোর্স ব্যবহৃত হয়:
দ্রুত প্রসেসিং:
Thread Synchronization:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void* print_message(void* message) {
char* msg = (char*)message;
for (int i = 0; i < 5; i++) {
printf("%s\n", msg);
sleep(1);
}
return NULL;
}
int main() {
pthread_t thread1, thread2;
// দুটি থ্রেড তৈরি করা
pthread_create(&thread1, NULL, print_message, "Thread 1: Hello");
pthread_create(&thread2, NULL, print_message, "Thread 2: World");
// থ্রেডগুলোর কাজ সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করা
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("All threads have completed.\n");
return 0;
}
Forking হলো একটি নতুন প্রক্রিয়া তৈরি করার পদ্ধতি, যেখানে মূল (parent) প্রক্রিয়া থেকে একটি নতুন (child) প্রক্রিয়া তৈরি করা হয়। এটি সম্পূর্ণ নতুন মেমোরি স্পেস নিয়ে কাজ করে, যা parent প্রক্রিয়ার একটি কপি।
Separate Memory Space:
Independent Execution:
নতুন প্রক্রিয়া তৈরি করা:
fork()
ফাংশন ব্যবহার করে Unix বা Linux সিস্টেমে নতুন প্রক্রিয়া তৈরি করা যায়। নতুন প্রক্রিয়া মূল প্রক্রিয়ার মতোই কিন্তু আলাদা মেমোরি স্পেসে কাজ করে।#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
pid_t pid;
// নতুন প্রক্রিয়া তৈরি করা
pid = fork();
if (pid < 0) {
// ত্রুটি হলে
perror("Fork failed");
exit(EXIT_FAILURE);
} else if (pid == 0) {
// Child প্রক্রিয়ার কোড
printf("Child process: My PID is %d\n", getpid());
} else {
// Parent প্রক্রিয়ার কোড
printf("Parent process: My PID is %d\n", getpid());
printf("Child process ID: %d\n", pid);
}
return 0;
}
বৈশিষ্ট্য | Multi-threading | Forking |
---|---|---|
মেমোরি ব্যবহারের ধরন | Shared Memory ব্যবহার করে | Separate Memory ব্যবহার করে |
রিসোর্স ব্যবহারের পরিমাণ | কম রিসোর্স প্রয়োজন | বেশি রিসোর্স প্রয়োজন |
কর্মক্ষমতা | দ্রুত Context Switching | নতুন প্রক্রিয়া তৈরি করতে ধীর |
সিঙ্ক্রোনাইজেশন | থ্রেড সিঙ্ক্রোনাইজেশন প্রয়োজন | সিঙ্ক্রোনাইজেশন সাধারণত প্রয়োজন হয় না |
ব্যবহারিক উদাহরণ | নেটওয়ার্ক সার্ভার, রিয়েল-টাইম অ্যাপ্লিকেশন | পৃথক কাজ বা স্বাধীন প্রসেসের জন্য যেমন CLI Tools |
Parallel Execution | একই প্রক্রিয়ায় আলাদা কাজ সম্পন্ন করে | সম্পূর্ণ আলাদা প্রক্রিয়া তৈরি করে স্বতন্ত্রভাবে কাজ করে |
common.read_more